$├90┴ ╙ET THE CURRENT BUFFER POINTER ┬╒╞╨╬╘ [$42/$43] TO $00/$40+─╒╨┬╒╞ [$4├╞9]. (IE. THE FIRST SECTOR USES ┬╒╞0 [$4000], THE NEXT USES ┬╒╞1 [$4100] ETC.
$├916 ╙ET ╧╓╥╨╬╘ [$75-$76] TO THE $5000... AREA. ╘HE ACTUAL START ADDRESS IS EXTRACTED FROM THE ╪╥┴═ [$├928] TABLE AND IS DEPENDENT ON THE BUFFER BEING USED ─╒╨┬╒╞ [$4├╞9].
$├925 ┼XIT WITH A JUMP TO ╥┼┴─╧╬ [$╞┼1┴] TO PERMIT READING DATA FROM THE DISK.
╪╥┴═ ╘ABLE OF OVERFLOW BUFFER AREAS FOR EACH BUFFER
┬UFFER ╧VERFLOW ┴CTIVE
╬UMBER ╓ALUE ┬UFFER ┬UFFER
$├928 0 $00/$50 $5000 $4000
$├92┴ 1 $46/$50 $5046 $4100
$├92├ 2 $8├/$50 $508├ $4200
$├92┼ 3 $─2/$50 $50─2 $4300
$├930 4 $18/$51 $5118 $4400
$├932 5 $5┼/$51 $515┼ $4500
$├934 6 $┴4/$51 $51┴4 $4600
$├936 7 $┼┴/$51 $51┼┴ $4700
$├938 8 $30/$52 $5230 $4800
$├93┴ 9 $76/$52 $5276 $4900
$├93├ ┴ $┬├/$52 $52┬├ $4┴00
$├93┼ ┬ $02/$53 $5302 $4┬00
╬OTE: ╘HE ACTUAL OVERFLOW BUFFER THAT IS USED STARTS AT THE ╧VERFLOW ┬UFFER ADDRESS FROM THE ABOVE TABLE + $┬┬.
─╒╨╥─ ╥EAD ╟├╥ DATA FOR THE CURRENT BLOCK
$├940 ╩╙╥ ─╒╨╚─╥ [$├977] TO POSITION TO THE ╙┘╬├ MARK FOR THE CURRENT DATA BLOCK.
$├943 ╫AIT FOR ╙┘╬├ SIGNAL TO TERMINATE.
$├946 ╙ET .┘ TO $┬┬ (THE INITIAL OFFSET IN THE OVERFLOW BUFFER AT WHICH TO STORE DATA. ╫HEN .┘ IS INCREMENTED TO 0, THE REMAINING DATA WILL BE STORED IN THE CORRESPONDING ACTIVE BUFFER.
$├948 ─╥╟1 ╫AIT FOR BYTE READY SIGNAL.
$├94┬ ╟ET DATA BYTE FROM PORT ┬ [$01] AND SAVE IT IN (╧╓╥╨╬╘),┘ [($75),┘].
$├94╞ ╔NCREMENT .┘ TO THE NEXT BYTE AND LOOP BACK TO ─╥╟1 IF .┘ IS NOT ZERO.
$├952 ─╥╟2 ╫AIT FOR BYTE READY SIGNAL.
$├955 ╟ET DATA BYTE FROM PORT ┬ [$01] AND SAVE IT IN (┬╒╞╨╬╘),┘ [($42),┘].
$├959 ╔NCREMENT .┘ TO THE NEXT BYTE AND LOOP BACK TO ─╥╟2 IF .┘ IS NOT ZERO.
$├95├ ┴LL ╟├╥ DATA BYTES HAVE BEEN READ SO RETURN.
║FP
─╒╨┼╥╥ ┼RROR OCURRED WHILE DUPLICATING A DISK
$├95─ ╘EMPORARILY TRANSFER THE ERROR CODE FROM .┴ TO .┘.
$├95┼ ╙ET ╧╓╥╨╬╘ [$75-$76] TO $00/$4╞. ╘HE NORMAL OVERFLOW BUFFER STARTS AT ╧╓╥┬╒╞ [$4╞00].
$├966 ├LEAR .╪ (AN UNNECESSARY INSTRUCTION).
$├968 ├OPY ╩╧┬╘╥╦ [$4┼┴5] TO ╘╥┴├╦ [$55] SO THE ERROR ROUTINE KNOWS THE TRACK IN ERROR.
$├96─ ├OPY ╩╧┬╙┼├ [$4┼┴6] TO ╙┼├╘╧╥ [$56] SO THE ERROR ROUTINE KNOWS THE SECTOR IN ERROR.
$├972 ╘RANSFER THE ERROR CODE FROM .┘ BACK INTO .┴.
$├973 ┼NABLE INTERRUPTS, AND TERMINATE THE ROUTINE WITH A JUMP TO ┼╥╥0 [$┼68┬].
─╒╨╚─╥ ┬UILD HEADER, READ IT, AND WAIT FOR DATA
$├977 ╩╙╥ ╙╥├╚ [$╞446] TO BUILD THE HEADER AND ATTEMPT TO READ IT.
$├97┴ ╔F THE READ FAILED (.┴ IS NOT ZERO) THEN BRANCH TO ─╒╨┼╥╥ [$├95─].
$├97├ ╩╙╥ ╙┘╬├ [$╞4┴6] TO WAIT FOR THE NEXT ╙┘╬├ MARK. ╘HIS SHOULD BE THE START OF THE DATA BLOCK.
$├97╞ ╔F ╙┘╬├ WAS NOT FOUND (.├ = 1) THEN BRANCH TO ─╒╨┼╥╥ [$├95─].
$├981 ┴LL IS WELL SO RETURN.
─╒╨╬╪╘ ╔NCREMENT CONTROLS FOR THE NEXT SECTOR
$├982 ╔NCREMENT ─╒╨╙┼├ [$4├╞8] BY 2. ╘HE TIMING OF THE ROUTINE DOES NOT ALLOW SECTORS TO BE READ CONSECUTIVELY.
$├988 ╔NCREMENT ─╒╨┬╒╞ [$4├╞9] BY 1 TO USE THE NEXT BUFFER.
$├98┬ ╙ET .├ TO 0 IF ─╒╨╙┼├ [$4├╞8] < ╙┼├╘╥ [$4┼┴┴] AND TO 1 OTHERWISE. ╘HIS FLAG IS USED TO INDICATE IF ANY SECTORS REMAIN TO BE PROCESSED.
$├991 ╥ETURN.
─╙╦├╧╨┘ ├OPY DISK FILES
$├992 ╙ET ┬╒╞╒╙┼ [$4├┬1/$4├┬2] TO $00/$╞├ TO INDICATE BUFFERS 0-9 INCLUSIVE ARE AVAILABLE FOR USE.
$├99├ ╩╙╥ ╙┼╘╠╔╬ [$├9┼├] TO MAKE CHANNELS 0-5 AVAILABLE.
$├99╞ ╩╙╥ ╨╥╙├╠╬ [$├11┴] TO SEE IF THERE IS A COLON (:) IN THE COMMAND STRING.
$├9┴2 ╔F A COLON IS FOUND THEN BRANCH TO ─╪0000.
$├9┴4 ╩╙╥ ─╒╨╨╥═ [$├9╞7] TO PARSE THE "0=1" OR "1=0" PART OF THE "├0=1" OR "├1=0" COMMAND.
$├9┴7 ╙ET UP $2┴ (*) IN ├═─┬╒╞+$27 [$4┼27] TO ACT AS THE FILE NAME PATTERN (IE COPY ALL FILES FROM 1 DRIVE TO THE OTHER).
$├9┬1 ╙ET ├═─╙╔┌ [$4╞], ╞1├╬╘ [$┬2], AND ╞2├╬╘ [$┬3] TO REFLECT THIS FILE NAME PATTERN.